<?php

class Link{

	private $idLink;
	private $idCurso;
	private $idUsuario;
	private $titulo;
	private $endereco;
	private $dataHoraInsercao;
	private $dataHoraUltimaModificacao;
	private $idUsuarioUltimaModificacao;
	
	/**
	 * @constructor
	 * @classDescription Funcao modelo que representa um link.
	 * @param int $idLink
	 */
	public function Link($idLink){
		
		$strQuery = "SELECT * FROM links WHERE idLink=".$idLink;
		
		if($resultado = BancoDados::query($strQuery)){
			
			$this->setIdLink($resultado[0]['idLink']);
			$this->setIdCurso($resultado[0]['idCurso']);
			$this->setIdUsuario($resultado[0]['idUsuario']);
			$this->setTitulo($resultado[0]['titulo']);
			$this->setEndereco($resultado[0]['endereco']);
			$this->setDataHoraInsercao($resultado[0]['dataHoraInsercao']);
			$this->setDataHoraUltimaModificacao($resultado[0]['dataHoraUltimaModificacao']);			
			$this->setIdUsuarioUltimaModificacao($resultado[0]['idUsuarioUltimaModificacao']);
		
		}else{
			$this->setIdLink(null);	
		}
	}


	public static function inserir($idCurso, $idUsuario, $strTitulo, $strEndereco){
		if (!preg_match('/^http\:\/\/.*$/', $strEndereco)) {
			$strEndereco	=	'http://' . $strEndereco;
		}
		if (Link::valida($strTitulo, $strEndereco)) {
			$strQuery = "INSERT INTO links VALUES (default, " . $idCurso . ", " . $idUsuario . ", \"" . $strTitulo ."\", \"" . $strEndereco . "\", NOW(), NOW(), " . $idUsuario . ")";
		
			if (BancoDados::query($strQuery)) {
				$strQuery	=	"SELECT idLink FROM links WHERE idCurso = " . $idCurso . " AND idUsuario = " . $idUsuario . " AND titulo = \"" . $strTitulo . "\" AND endereco = \"" . $strEndereco . "\" ORDER BY idLink DESC LIMIT 1";
				if (is_array($resultado = BancoDados::query($strQuery))) {
					if (sizeof($resultado) > 0) {
						return $resultado[0]['idLink'];
					}
					else {
						return true;
					}
				}
				else {
					return true;
				}
			}
			else {
				return false;
			}
		}
		else {
			return false;
		}
	}
	
	public static function editar($idLink, $idUsuario, $strTitulo, $strEndereco){
		if (Link::valida($strTitulo, $strEndereco)) {
			$strQuery = "UPDATE links SET titulo='". $strTitulo ."', endereco='" . $strEndereco ."', dataHoraUltimaModificacao=NOW(), idUsuarioUltimaModificacao=". $idUsuario ." WHERE idLink=".$idLink;
			return BancoDados::query($strQuery);
		}
		else {
			return false;
		}
	}
	
	public static function apagar($idLink){
		$strQuery	=	"DELETE FROM associacoes WHERE (idElemento1 = " . $idLink . " AND elemento1 = \"links\") OR (idElemento2 = " . $idLink . " AND elemento2 = \"links\")";
		if (BancoDados::query($strQuery)) {
			$strQuery = "DELETE FROM links WHERE idLink = " . $idLink;
			return BancoDados::query($strQuery);
		}
		else {
			return false;
		}
	}
		
	public static function buscar($idLink, $idCurso, $idUsuario, $strTitulo, $strEndereco, $dataHoraInsercaoInicio, $dataHoraInsercaoFim, $paginaAtual = NULL, $resultadosPagina = NULL, $ordenacaoAtual = NULL, $ordemAtual = NULL){
		
		$strQuery = "SELECT idLink as idItem, idCurso, idUsuario, titulo, endereco, dataHoraInsercao, dataHoraUltimaModificacao, idUsuarioUltimaModificacao FROM links WHERE ";
		
		$idLinks	=	null;
		if (is_array($idLink)) {
			foreach ($idLink as $id) {
				$idLinks	.=	$id . ", ";
			}
			$idLinks	=	preg_replace('/, $/', '', $idLinks);
		}
		else
			$idLinks	=	$idLink;

		$strQuery .= $idLinks == null ? "" : "idLink IN (" . $idLinks . ") AND ";
		$strQuery .= $idCurso == null ? "" : "idCurso = " . $idCurso . " AND ";
		$strQuery .= $idUsuario == null ? "" : "idUsuario = " . $idUsuario . " AND ";
		
		$strQuery .= $strTitulo == null ? "" : configuraRegexpStringBusca($strTitulo, 'titulo');
		$strQuery .= $strEndereco == null ? "" : configuraRegexpStringBusca($strEndereco, 'endereco');
		
		$strQuery .= $dataHoraInsercaoInicio != null ? 'dataHoraInsercao >= "' . $dataHoraInsercaoInicio . ' 0:0:0" AND ' : '';
		$strQuery .= $dataHoraInsercaoFim != null ? 'dataHoraInsercao <= "' . $dataHoraInsercaoFim . ' 23:59:59" AND ' : '';
		
		$strQuery =	preg_replace('/ WHERE $/', ' ', $strQuery);
		$strQuery =	preg_replace('/ AND $/', ' ', $strQuery);
		
		$strQueryCount	=	'SELECT COUNT(*) AS qtdResultados FROM (' . $strQuery . ') AS queryOriginal';
		
		if ($resultadoCount = BancoDados::query($strQueryCount)) {
			foreach($resultadoCount as $resultado) {
				$qtdResultados	=	$resultado['qtdResultados'];
			}

			if ($qtdResultados > 0) {
				$paginaAtual	=	$paginaAtual == NULL	?	1 : $paginaAtual;
				$ordenacaoAtual	=	$ordenacaoAtual == NULL	?	'dataHoraInsercao' : $ordenacaoAtual;
				$ordemAtual		=	$ordemAtual == NULL		?	'ASC' : ($ordemAtual == 'desc' ? 'DESC' : 'ASC');
					
				$strQuery	.=	' ORDER BY ' . $ordenacaoAtual . ' ' . $ordemAtual;
					
				if ($resultadosPagina != NULL) {
					$qtdPaginas		=	ceil($qtdResultados / $resultadosPagina);
					$qtdPaginas		=	$qtdPaginas == 0 ? 1 : $qtdPaginas;

					$strQuery		.=	' LIMIT ' . $resultadosPagina . ' OFFSET ' . (($paginaAtual - 1) * $resultadosPagina);
					
				}else{
					$qtdPaginas	=	1;
				}
					
				$strQuery .= ';';
					
				$resultado = BancoDados::query($strQuery);
				
				if(is_array($resultado)){
					return array ('listaResultados' => $resultado, 'qtdResultadosTotal' => $qtdResultados, 'qtdPaginas' => $qtdPaginas);
				}else{
					return false;
				}
				
			}else{
				return array('listaResultados' => array(), 'qtdResultadosTotal' => 0, 'qtdPaginas' => 0);
			}
		}else{
			return false;
		}
		
	}
	
	public static function buscarLinksCurso($idCurso, $paginaAtual = NULL, $resultadosPagina = NULL, $ordenacaoAtual = NULL, $ordemAtual = NULL){
		return Link::buscar(null, $idCurso, null, null, null, null, null, $paginaAtual, $resultadosPagina, $ordenacaoAtual, $ordemAtual);
	}
	
	public static function valida($strTitulo, $strEndereco){
		$validou	=	true;
		
		if (!validaAlfaNumerico($strTitulo, constant('__TAM_TITULO_LINK__'))){
			$validou	=	false;
			adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_CAMPO_INPUT', array(texto('DADOS_TITULO'))), 'erro');	
		}
		
		if (!validaUrlExterna($strEndereco)){
			$validou	=	false;
			adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_CAMPO_INPUT', array(texto('DADOS_ENDERECO'))), 'erro');	
		}
		
		return $validou;
	}
	
	public function getIdLink(){
		return $this->idLink;
	}
	
	public function setIdLink($idLink){
		$this->idLink = $idLink;
	}
	
	public function getIdCurso(){
		return $this->idCurso;
	}
	
	public function setIdCurso($idCurso){
		$this->idCurso = $idCurso;
	}
	
	public function getIdUsuario(){
		return $this->idUsuario;
	}
	
	public function setIdUsuario($idUsuario){
		$this->idUsuario = $idUsuario;
	}
	
	public function getTitulo(){
		return $this->titulo;
	}
	
	public function setTitulo($titulo){
		$this->titulo = $titulo;
	}
	
	public function getEndereco(){
		return $this->endereco;
	}
	
	public function setEndereco($endereco){
		$this->endereco = $endereco;
	}
	
	public function getDataHoraInsercao(){
		return $this->dataHoraInsercao;
	}
	
	public function setDataHoraInsercao($dataHoraInsercao){
		$this->dataHoraInsercao = $dataHoraInsercao;
	}
	
	public function getDataHoraUltimaModificacao(){
		return $this->dataHoraUltimaModificacao;
	}
	
	public function setDataHoraUltimaModificacao($dataHoraUltimaModificacao){
		$this->dataHoraUltimaModificacao = $dataHoraUltimaModificacao;
	}
	
	public function getIdUsuarioUltimaModificacao(){
		return $this->idUsuarioUltimaModificacao;
	}
	
	public function setIdUsuarioUltimaModificacao($idUsuarioUltimaModificacao){
		$this->idUsuarioUltimaModificacao = $idUsuarioUltimaModificacao;
	}
	
}
?>